﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Cotizav.AccesoDatos
{
    public class TipoEquipoDAO
    {

        public List<Entidades.Tipo> Listar(Util.ContextoDB ctx)
        {
            SqlCommand cmd = new SqlCommand("select * from TIPO", ctx.GetConexion(), ctx.GetTx());
            DataTable dtTipoEquipo = new DataTable();
            dtTipoEquipo.Load(cmd.ExecuteReader());

            List<Entidades.Tipo> lista = new List<Entidades.Tipo>();

            foreach (DataRow fila in dtTipoEquipo.Rows)
            {
                Entidades.Tipo t = new Entidades.Tipo();

                t.IdTipo = Int32.Parse(fila["ID"].ToString());
                t.NombreTipo = fila["NOMBRETIPO"].ToString();
                t.Activo = Int32.Parse(fila["ACTIVO"].ToString());
                t.FechaRegistro = !(fila["FECHAREGISTRO"] is DBNull) ? Convert.ToDateTime(fila["FECHAREGISTRO"].ToString()) : new Nullable<DateTime>();
                t.FechaModificacion = !(fila["FECHAMODIFICACION"] is DBNull) ? Convert.ToDateTime(fila["FECHAMODIFICACION"].ToString()) : new Nullable<DateTime>();
                t.UsuarioRegistro = fila["USUARIOREGISTRO"].ToString();
                t.UsuarioModificacion = fila["USUARIOMODIFICACION"].ToString();

                lista.Add(t);
            }

            return lista;
        }

        public int Registrar(Util.ContextoDB ctx, Entidades.Tipo newTipoEquipo)
        {
            SqlCommand cmd = new SqlCommand("USP_TIPOEQUIPO_INSERT", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", 0).Direction = System.Data.ParameterDirection.Output;
            cmd.Parameters.AddWithValue("@NOMBRETIPO", newTipoEquipo.NombreTipo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ACTIVO", newTipoEquipo.Activo);
            cmd.Parameters.AddWithValue("@FECHAREGISTRO", newTipoEquipo.FechaRegistro ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@USUARIOREGISTRO", newTipoEquipo.UsuarioRegistro ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();

            return result;
        }

        public int Actualizar(Util.ContextoDB ctx, Entidades.Tipo updTipoEquipo)
        {
            SqlCommand cmd = new SqlCommand("USP_TIPOEQUIPO_UPDATE", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", updTipoEquipo.IdTipo);
            cmd.Parameters.AddWithValue("@NOMBRETIPO", updTipoEquipo.NombreTipo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@FECHAMODIFICACION", updTipoEquipo.FechaModificacion ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@USUARIOMODIFICACION", updTipoEquipo.UsuarioModificacion ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();

            return result;
        }

        public int Eliminar(Util.ContextoDB ctx, Entidades.Tipo delTipoEquipo)
        {
            SqlCommand cmd = new SqlCommand("USP_TIPOEQUIPO_ELIMINAR", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", delTipoEquipo.IdTipo);
            int result = cmd.ExecuteNonQuery();

            return result;
        }
    }
}
